#!/usr/bin/env python3.9
# -*- encoding: utf-8 -*-
"""
@文件        :custome_renderer.py
@说明        : 自定drf返回值格式
@时间        :2022/11/29 09:42:04
@作者        :Mars
@版本        :1.0
"""
from rest_framework.renderers import JSONRenderer

from mars.utils.exceptions.result import R


# 导入控制返回的JSON格式的类
class CustomRenderer(JSONRenderer):
    # 重构render方法
    def render(self, data, accepted_media_type=None, renderer_context=None):
        if renderer_context:
            # 判断实例的类型，返回的数据可能是列表也可能是字典

            # 如果返回的data为字典
            if isinstance(data, dict):
                # 响应信息中有message和code这两个key，则获取响应信息中的message和code，并且将原本data中的这两个key删除，放在自定义响应信息里
                # 响应信息中没有则将msg内容改为请求成功 code改为请求的状态码
                success = data.pop("success", True)
                msg = data.pop("msg", "请求成功")
                code = data.pop("code", renderer_context["response"].status_code)
                err_detail = data.pop("err_detail",None)
            # 如果不是字典则将msg内容改为请求成功 code改为请求的状态码
            else:
                success = True
                msg = "请求成功"
                code = renderer_context["response"].status_code
                err_detail = None

            # 自定义返回的格式
            ret = {
                "success": success,
                "msg": msg,
                "code": code,
            }
            # 返回数据或错误详细
            if data:
                ret["data"] = data
            if err_detail:
                ret['detail'] = err_detail
                
            # 返回JSON数据
            return super().render(ret, accepted_media_type, renderer_context)
        else:
            return super().render(data, accepted_media_type, renderer_context)
